草庐IT

c++ tcp多线程

全部标签

java - 使数据结构线程安全的最有效方法(Java)

我有一个需要线程安全的共享map数据结构。同步是读取或添加到map的最有效方式吗?谢谢!编辑:数据结构是一个不可更新的缓存,即一旦填满它就不会更新缓存。因此,最初有很多写入和一些读取,然后主要是读取 最佳答案 “最有效率”当然是相对的,要看你的具体情况。但是考虑像ConcurrentHashMap这样的东西如果您希望有多个线程同时处理map;它是线程安全的,但仍然允许并发访问,这与Hashtable或Collections.synchronizedMap()不同。 关于java-使数据结

java - 从外部获取线程变量的值

假设我有一个像这样运行的线程:privatebooleanworking=true;@Overridepublicvoidrun(){working=true;//dosomethingworking=false;....}在我的主线程中,我不断地展示正在使用的状态while(threadClassObject.isWorking()){System.out.println(threadClassObject.isWorking());}这行得通吗?我试过这个例子,它似乎有效。但是有没有办法让它崩溃呢?什么例如如果线程正在改变工作状态,而同时主线程试图读取它,会发生这种情况吗?

java - 无法对可扩展方法进行多线程处理

更新:为了帮助阐明我要问的内容,我发布了一些java代码来理解这个想法。前一段时间我问了一个question关于如何让算法分解一组数字,我的想法是给它一个数字列表(1,2,3,4,5)和一个总数(10),它会计算出每个数字的所有倍数加起来等于总数('1*10'or'1*1,1*2,1*3,1*4'或'2*5'等)。这是我做过的第一个编程练习,所以我花了一段时间才开始工作,但现在我想看看我是否可以扩展它。最初问题中的人说它是可扩展的,但我对如何去做有点困惑。递归部分是我坚持缩放结合所有结果的部分的区域(它所指的表不可缩放但应用缓存我能够使其快速)我有以下算法(伪代码)://generat

Java - 让死线程复活

以下问题在我的一次采访中被问到(几年前)Whatareallthepossibilities/waystobringthedeadthreadbacktoalive(RunnableState)我辩解说没有办法。但他敦促我思考。真的有可用的选项吗?或者他只是在检查我对我的回答的信心? 最佳答案 死亡状态:线程在其run()方法完成时可以被视为死亡。如果任何线程进入此状态,则意味着它永远无法再次运行。 关于Java-让死线程复活,我们在StackOverflow上找到一个类似的问题:

java - 了解线程+异步

因此,我有一个程序需要将大量(例如10,000多个)GET请求发送到一个URL,并且我希望它尽可能快。当我第一次创建程序时,我只是将连接置于for循环中,但这确实很慢,因为它必须等待每个连接完成才能继续。我想使其速度更快,所以我尝试使用线程,它使速度有所提高,但我仍然不满意。我猜想正确的方法是使用异步连接并连接到所有URL,以使其真正快速地实现。这是正确的方法吗?另外,我一直在尝试了解线程及其工作方式,但似乎无法理解。我所在的计算机具有IntelCorei7-3610QM四核处理器。根据英特尔网站的规范,该处理器具有8个线程。这是否意味着我可以在Java应用程序中创建8个线程,它们将同

java - java同时运行两个线程

我已经使用timertask来安排我的java程序。现在,当timertask的运行方法正在运行时,我想运行两个同时运行的线程并执行不同的功能。这是我的代码..请帮助我..importjava.util.Calendar;importjava.util.Date;importjava.util.Timer;importjava.util.TimerTask;publicclasstimercheckextendsTimerTask{//myfirstthreadThreadt1=newThread(){publicvoidrun(){for(inti=1;i

java - Volatile 关键字和线程本地内存

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我对Java中volatile关键字的用法感到困惑。我在互联网上阅读了很多文章,但仍然一无所获。我脑子里有很多问题想问:首先,维基百科和许多博客都说所有volatile变量都存储在所有线程共享的主内存之上的Thread-Local内存中!我有点困惑,它们是指stackmemory吗?我知道每个线程都有自己的堆栈内存,它存储自己的原始文字和对象引用。如果是这

java - 线程池执行器 : how does it reuse threads

我读到ThreadPoolExecutor有线程池,这个池注定要降低创建新线程的成本(至少我是这样理解下面的短语):Whenyousendatasktotheexecutor,ittriestouseapooledthreadfortheexecutionofthistask,toavoidcontiniousspawningofthreads.[Java7ConcurrencyCookbook]但是,据我所知,我们无法在Java中重新启动线程。问题:ThreadPoolExecutor如何避免创建新线程? 最佳答案 这很简单-本质

Java 多线程与 Guava EventBus

我正在使用Guava事件总线。我有一个类似服务器的对象,它应该一直运行,监听要发布到bus的事件。所以在junit测试中(MyObject是被测类),我在自己的线程中创建它来模拟它并防止阻塞:@Testpublicvoidtest(){EventBuseventBus=newEventBus();Threadthread=newThread(){@Overridepublicvoidrun(){logger.debug("Creatingnewthread");MyObjectmyObject=newMyObject(eventBus);}};thread.start();...}一切

java - 以负载均衡方式在 4 个线程上分配 10 个无限作业 (Java)

我有10个计算作业,需要(接近)无限时间。例如:计算PI的下一位,solve一个NP-hard约束满足问题等。我有4个线程(所以在一台有8个内核的机器上有一个有4个线程的线程池,所以我还有一些内核可以避免活锁机器和过程)。使用Java8,如何在这4个线程中分配这10个作业?这是个坏主意:ExecutorServicees=Executors.newFixedThreadPool(4);for(Jobj:jobs){es.submit(j);}因为4个工作将开始,但没有一个完成,所以工作5-10永远不会开始。例如,如果我查看10分钟,我预计每个作业运行了大约4分钟。20分钟后,每个作业运